import request from '@/utils/request'
import type { File as FileData, UploadFile, FileQuery, FileList } from '@/types/api/file'
import type { API } from '@/types/api/response'

/**
 * 获取文件列表
 * @param params 查询参数
 */
export interface FileListParams {
  keyword?: string
  type?: string
  page: number
  pageSize: number
  dateRange?: string[]
}

/**
 * 获取文件列表响应类型
 */
export interface FileListResult {
  list: FileData[]
  total: number
}

/**
 * 获取文件列表
 * @param params 查询参数
 */
export const getFileList = (params: FileQuery) => {
  return request.get<API.Response<FileList>>('/api/file/list', { params })
}

/**
 * 上传文件
 * @param data 上传参数
 */
export const uploadFile = (data: UploadFile) => {
  const formData = new FormData()
  formData.append('file', data.file)
  if (data.folder) {
    formData.append('folder', data.folder)
  }
  if (data.description) {
    formData.append('description', data.description)
  }
  return request.post<API.Response<FileData>>('/api/file/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 删除文件
 * @param ids 文件ID数组
 */
export const deleteFiles = (ids: string[]) => {
  return request.delete<API.Response<null>>('/api/file', { data: { ids } })
}

/**
 * 下载文件
 * @param id 文件ID
 */
export const downloadFile = (id: string) => {
  return request.get<Blob>(`/api/file/${id}/download`, {
    responseType: 'blob'
  })
}

/**
 * 获取文件详情
 * @param id 文件ID
 */
export const getFileDetail = (id: string) => {
  return request.get<API.Response<FileData>>(`/api/file/${id}`)
}

/**
 * 更新文件信息
 * @param id 文件ID
 * @param data 文件信息
 */
export const updateFile = (id: string, data: Partial<FileData>) => {
  return request.put<API.Response<null>>(`/api/file/${id}`, data)
}

/**
 * 移动文件
 * @param ids 文件ID数组
 * @param folderId 目标文件夹ID
 */
export const moveFiles = (ids: string[], folderId: string) => {
  return request.put<API.Response<null>>('/api/file/move', { ids, folderId })
}

/**
 * 复制文件
 * @param ids 文件ID数组
 * @param folderId 目标文件夹ID
 */
export const copyFiles = (ids: string[], folderId: string) => {
  return request.post<API.Response<null>>('/api/file/copy', { ids, folderId })
}

/**
 * 获取文件预览URL
 * @param id 文件ID
 */
export const getFilePreviewUrl = (id: string) => {
  return request.get<API.Response<{ url: string }>>(`/api/file/${id}/preview`)
} 